package com.mbengue.corp.apr.ra.beans;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.faces.model.SelectItem;

import com.mbengue.corp.apr.ra.core.Adresse;
import com.mbengue.corp.apr.ra.core.Membre;
import com.mbengue.corp.apr.ra.dao.AdresseDao;
import com.mbengue.corp.apr.ra.dao.DAOFactory;
import com.mbengue.corp.apr.ra.dao.MembreDao;

@ManagedBean(name = "editerMembreBean")
@SessionScoped
public class EditerMembreBean implements Serializable {
  private static final long serialVersionUID = 1L;
  private static final String[] ROLES = { "Simple", "Editeur", "Administrateur" };
  private static final String[] DB_ROLES = { "r", "w", "x" };
  //
  private Membre membre;
  private Adresse adresse;
  private MembreDao membreDao;
  private AdresseDao adresseDao;
  private List<SelectItem> roles = new ArrayList<SelectItem>();
  private boolean canDelete = false;

  public EditerMembreBean() {
    membre = new Membre();
    membreDao = DAOFactory.getMembreDao();
    adresseDao = DAOFactory.getAdresseDao();
    //
    for (int i = 0; i < ROLES.length; i++) {
      roles.add(new SelectItem(DB_ROLES[i], ROLES[i]));
    }
  }

  public void attrListener(ActionEvent event) {
    Membre tmpMembre = (Membre) event.getComponent().getAttributes().get("membre");
    canDelete = tmpMembre.getEmail().equals(membre.getEmail());
    membre = tmpMembre;
    adresse = DAOFactory.getAdresseMembreDao().trouverAdresseMembre(membre).getAdresse();
  }

  public Membre getMembre() {
    return membre;
  }

  public Adresse getAdresse() {
    return adresse;
  }

  public List<SelectItem> getRoles() {
    return roles;
  }

  public String editerMembre() {
    try {
      adresseDao.update(adresse);
      membreDao.update(membre);
      membre = new Membre();
      return "/pages/contacts.xhtml?faces-redirect=true";
    } catch (Exception e) {
      FacesContext.getCurrentInstance().addMessage(null,
          new FacesMessage(FacesMessage.SEVERITY_ERROR, "Une erreur est survenue lors de la mise à jour.", ""));
      e.printStackTrace();
      return null;
    }
  }

  public String supprimerMembre() {
    if (!canDelete) {
      FacesContext.getCurrentInstance().addMessage(
          null,
          new FacesMessage(FacesMessage.SEVERITY_INFO, "Cliquez une seconde fois sur le bouton Supprimer du contact ("
              + membre.getNoms() + ") pour confirmer la suppression !", ""));
      return null;
    }
    int deleted = DAOFactory.getAdresseMembreDao().supprimerAdresseMembre(membre);
    if (deleted > 0) {
      adresseDao.supprimer(adresse);
      DAOFactory.getArticleMembreDao().supprimerArticleMembre(membre);
      membreDao.supprimer(membre);
      membre = new Membre();
      adresse = new Adresse();
      return "/pages/contacts.xhtml?faces-redirect=true";
    }
    FacesContext.getCurrentInstance().addMessage(
        null,
        new FacesMessage(FacesMessage.SEVERITY_ERROR, "Une erreur est survenu lors de la suppression du membre ("
            + membre.getNoms() + ")", ""));
    return null;
  }

  public String editer() {
    return "/pages/editer/editerMembre.xhtml?faces-redirect=true";
  }
}
